package com.example.Data;

import javax.management.Query;
import java.util.*;

public class Test {
    public static void main(String[] args) {
//        特点： 固定大小，存储相同类型的元素。
//        优点： 随机访问元素效率高。
//        缺点： 大小固定，插入和删除元素相对较慢。
        int[] arrays = new int[5];

//        特点： 动态数组，可变大小。
//        优点： 高效的随机访问和快速尾部插入。
//        缺点： 中间插入和删除相对较慢。
        List<String> arrayList = new ArrayList<>();

//        特点： 双向链表，元素之间通过指针连接。
//        优点： 插入和删除元素高效，迭代器性能好。
//        缺点： 随机访问相对较慢。
        List<Integer> linkedList = new LinkedList<>();


//        特点： 无序集合，基于HashMap实现。
//        优点： 高效的查找和插入操作。
//        缺点： 不保证顺序。
        Set<String> hashSet = new HashSet<>();

//        特点：TreeSet 是有序集合，底层基于红黑树实现，不允许重复元素。
//        优点： 提供自动排序功能，适用于需要按顺序存储元素的场景。
//        缺点： 性能相对较差，不允许插入 null 元素。
        Set<Integer> treeSet = new TreeSet<>();

//        特点： 基于哈希表实现的键值对存储结构。
//        优点： 高效的查找、插入和删除操作。
//        缺点： 无序，不保证顺序
        Map<String,Integer> hashMap = new HashMap<>();

//        特点： 基于红黑树实现的有序键值对存储结构。
//        优点： 有序，支持按照键的顺序遍历。
//        缺点： 插入和删除相对较慢。
        Map<String,Integer> treeMap = new TreeMap<>();

        // 栈（Stack）是一种线性数据结构，它按照后进先出（Last In, First Out，LIFO）的原则管理元素。在栈中，新元素被添加到栈的顶部，而只能从栈的顶部移除元素。这就意味着最后添加的元素是第一个被移除的。
        //特点： 代表一个栈，通常按照(后进先出)（LIFO）的顺序操作元素。
        Stack<Integer> stack = new Stack<>();

        // 队列（Queue）遵循先进先出（FIFO）原则，常见的实现有 LinkedList 和 PriorityQueue。
//        特点： 代表一个队列，通常按照先进先出（FIFO）的顺序操作元素。
//        实现类： LinkedList, PriorityQueue, ArrayDeque。
        Queue<String> queue = new LinkedList<>();
//        Queue<String> queue2 = new PriorityQueue<>();

//        堆（Heap）优先队列的基础，可以实现最大堆和最小堆。
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());

    }
}
//Java 提供了 TreeNode 类型，可以用于构建二叉树等数据结构。
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x){
        val = x;
    }
}
